package com.example.demo.util;

import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.security.Security;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.servlet.http.Cookie;

public class AESUtils {
	//KeyGenerator 提供对称密钥生成器的功能，支持各种算法
			private static KeyGenerator keygen;
			//SecretKey 负责保存对称密钥
			private static SecretKey deskey;
			//Cipher负责完成加密或解密工作
			private static Cipher c;
			//该字节数组负责保存加密的结果
			private static byte[] cipherByte;
			
			@SuppressWarnings("restriction")
			public AESUtils() throws NoSuchAlgorithmException, NoSuchPaddingException{
				
				
			}
			
			/**
			 * 对字符串加密
			 * 
			 * @param str
			 * @return
			 * @throws InvalidKeyException
			 * @throws IllegalBlockSizeException
			 * @throws BadPaddingException
			 * @throws NoSuchAlgorithmException 
			 * @throws NoSuchPaddingException 
			 */
			public static byte[] Encrytor(String str) throws InvalidKeyException,
					IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException {
				
				Security.addProvider(new com.sun.crypto.provider.SunJCE());
				//实例化支持DES算法的密钥生成器(算法名称命名需按规定，否则抛出异常)
				keygen = KeyGenerator.getInstance("AES");
				//生成密钥
				deskey = keygen.generateKey();
				//生成Cipher对象,指定其支持的DES算法
				c = Cipher.getInstance("AES");
				
				// 根据密钥，对Cipher对象进行初始化，ENCRYPT_MODE表示加密模式
				c.init(Cipher.ENCRYPT_MODE, deskey);
				byte[] src = str.getBytes();
				// 加密，结果保存进cipherByte
				cipherByte = c.doFinal(src);
				return cipherByte;
			}
		 
			/**
			 * 对字符串解密
			 * 
			 * @param buff
			 * @return
			 * @throws InvalidKeyException
			 * @throws IllegalBlockSizeException
			 * @throws BadPaddingException
			 */
			public static byte[] Decryptor(byte[] buff) throws InvalidKeyException,
					IllegalBlockSizeException, BadPaddingException {
				// 根据密钥，对Cipher对象进行初始化，DECRYPT_MODE表示加密模式
				c.init(Cipher.DECRYPT_MODE, deskey);
				cipherByte = c.doFinal(buff);
				return cipherByte;
			}
		 
			/**
			 * @param args
			 * @throws NoSuchPaddingException 
			 * @throws NoSuchAlgorithmException 
			 * @throws BadPaddingException 
			 * @throws IllegalBlockSizeException 
			 * @throws InvalidKeyException 
			 */
			public static void main(String[] args) throws Exception {
				AESUtils de1 = new AESUtils();
				String msg ="res";
				
				System.out.println("明文是:" + msg);
				System.out.println("加密后:" + new String(Encrytor(msg)));
			}
		 

}